Move gdk_window_get_deskrelative_origin to the GdkWindowImpl and make the common...
authorAlexander Larsson <alexl@redhat.com>
Sat, 6 Dec 2008 21:43:01 +0000 (22:43 +0100)
committerAlexander Larsson <alex@localhost.localdomain>
Thu, 2 Apr 2009 08:14:07 +0000 (10:14 +0200)
gdk/gdk.symbols
gdk/gdkwindow.c
gdk/gdkwindowimpl.h
gdk/x11/gdkwindow-x11.c

index 30c5376f1881ac1cc126f921f3b8e935cdc7c206..b0d82eba452218a7869f708342d9f9154566b166 100644 (file)
@@ -661,6 +661,7 @@ gdk_window_set_back_pixmap
 gdk_window_set_cursor
 gdk_window_get_geometry
 gdk_window_get_origin
+gdk_window_get_deskrelative_origin
 gdk_window_shape_combine_mask
 gdk_window_shape_combine_region
 gdk_window_set_child_shapes
@@ -734,7 +735,6 @@ gdk_window_lookup
 gdk_window_lookup_for_display
 #ifndef GDK_DISABLE_DEPRECATED
 gdk_window_set_hints
-gdk_window_get_deskrelative_origin
 #endif
 gdk_window_get_type_hint
 gdk_window_set_type_hint
index ea5642fe82bd849786078c697952aa9ea125456a..5321ae0a7b2abd981fe1eb9a43bd725d44ba8471 100644 (file)
@@ -5945,6 +5945,49 @@ gdk_window_get_origin (GdkWindow *window,
   return TRUE;
 }
 
+
+/**
+ * gdk_window_get_deskrelative_origin:
+ * @window: a toplevel #GdkWindow
+ * @x: return location for X coordinate
+ * @y: return location for Y coordinate
+ * 
+ * This gets the origin of a #GdkWindow relative to
+ * an Enlightenment-window-manager desktop. As long as you don't
+ * assume that the user's desktop/workspace covers the entire
+ * root window (i.e. you don't assume that the desktop begins
+ * at root window coordinate 0,0) this function is not necessary.
+ * It's deprecated for that reason.
+ * 
+ * Return value: not meaningful
+ **/
+gboolean
+gdk_window_get_deskrelative_origin (GdkWindow *window,
+                                   gint      *x,
+                                   gint      *y)
+{
+  GdkWindowObject *private;
+  gboolean return_val = FALSE;
+  gint tx = 0;
+  gint ty = 0;
+
+  g_return_if_fail (GDK_IS_WINDOW (window));
+
+  private = (GdkWindowObject *) window;
+  
+  if (!GDK_WINDOW_DESTROYED (window))
+    {
+      GDK_WINDOW_IMPL_GET_IFACE (private->impl)->get_deskrelative_origin (window, &tx, &ty);
+      
+      if (x)
+       *x = tx + private->abs_x;
+      if (y)
+       *y = ty + private->abs_y;
+    }
+  
+  return return_val;
+}
+
 /**
  * gdk_window_shape_combine_mask:
  * @window: a #GdkWindow
index f9218b98369de93e50964e100593fa499b5848bf..7ffd388b918053fb674a283dd86591d956b2b517 100644 (file)
@@ -88,6 +88,9 @@ struct _GdkWindowImplIface
   gint         (* get_origin)           (GdkWindow       *window,
                                          gint            *x,
                                          gint            *y);
+  gint         (* get_deskrelative_origin) (GdkWindow       *window,
+                                         gint            *x,
+                                         gint            *y);
 
   void         (* shape_combine_mask)   (GdkWindow       *window,
                                          GdkBitmap       *mask,
index dad4abc0351bb78cf1beaa8a801d1577ec2e510c..a133655594582e6df1f7ec2d24796d17d5a062da 100644 (file)
@@ -2793,80 +2793,54 @@ gdk_window_x11_get_origin (GdkWindow *window,
   return return_val;
 }
 
-/**
- * gdk_window_get_deskrelative_origin:
- * @window: a toplevel #GdkWindow
- * @x: return location for X coordinate
- * @y: return location for Y coordinate
- * 
- * This gets the origin of a #GdkWindow relative to
- * an Enlightenment-window-manager desktop. As long as you don't
- * assume that the user's desktop/workspace covers the entire
- * root window (i.e. you don't assume that the desktop begins
- * at root window coordinate 0,0) this function is not necessary.
- * It's deprecated for that reason.
- * 
- * Return value: not meaningful
- **/
-gboolean
-gdk_window_get_deskrelative_origin (GdkWindow *window,
-                                   gint      *x,
-                                   gint      *y)
+static gboolean
+gdk_window_x11_get_deskrelative_origin (GdkWindow *window,
+                                       gint      *x,
+                                       gint      *y)
 {
   gboolean return_val = FALSE;
   gint num_children, format_return;
   Window win, *child, parent, root;
-  gint tx = 0;
-  gint ty = 0;
   Atom type_return;
   Atom atom;
   gulong number_return, bytes_after_return;
   guchar *data_return;
   
-  if (!GDK_WINDOW_DESTROYED (window) &&
-      WINDOW_IS_TOPLEVEL (window))
+  atom = gdk_x11_get_xatom_by_name_for_display (GDK_WINDOW_DISPLAY (window),
+                                               "ENLIGHTENMENT_DESKTOP");
+  win = GDK_WINDOW_XID (window);
+  
+  while (XQueryTree (GDK_WINDOW_XDISPLAY (window), win, &root, &parent,
+                    &child, (unsigned int *)&num_children))
     {
-      atom = gdk_x11_get_xatom_by_name_for_display (GDK_WINDOW_DISPLAY (window),
-                                                   "ENLIGHTENMENT_DESKTOP");
-      win = GDK_WINDOW_XID (window);
+      if ((child) && (num_children > 0))
+       XFree (child);
+      
+      if (!parent)
+       break;
+      else
+       win = parent;
+      
+      if (win == root)
+       break;
+      
+      data_return = NULL;
+      XGetWindowProperty (GDK_WINDOW_XDISPLAY (window), win, atom, 0, 0,
+                         False, XA_CARDINAL, &type_return, &format_return,
+                         &number_return, &bytes_after_return, &data_return);
       
-      while (XQueryTree (GDK_WINDOW_XDISPLAY (window), win, &root, &parent,
-                        &child, (unsigned int *)&num_children))
+      if (type_return == XA_CARDINAL)
        {
-         if ((child) && (num_children > 0))
-           XFree (child);
-         
-         if (!parent)
-           break;
-         else
-           win = parent;
-         
-         if (win == root)
-           break;
-         
-         data_return = NULL;
-         XGetWindowProperty (GDK_WINDOW_XDISPLAY (window), win, atom, 0, 0,
-                             False, XA_CARDINAL, &type_return, &format_return,
-                             &number_return, &bytes_after_return, &data_return);
-
-         if (type_return == XA_CARDINAL)
-           {
-             XFree (data_return);
-              break;
-           }
+         XFree (data_return);
+         break;
        }
-      
-      return_val = XTranslateCoordinates (GDK_WINDOW_XDISPLAY (window),
-                                         GDK_WINDOW_XID (window),
-                                         win,
-                                         0, 0, &tx, &ty,
-                                         &root);
-      if (x)
-       *x = tx;
-      if (y)
-       *y = ty;
     }
   
+  return_val = XTranslateCoordinates (GDK_WINDOW_XDISPLAY (window),
+                                     GDK_WINDOW_XID (window),
+                                     win,
+                                     0, 0, x, y,
+                                     &root);
   
   return return_val;
 }
@@ -5959,6 +5933,7 @@ gdk_window_impl_iface_init (GdkWindowImplIface *iface)
   iface->set_cursor = gdk_window_x11_set_cursor;
   iface->get_geometry = gdk_window_x11_get_geometry;
   iface->get_origin = gdk_window_x11_get_origin;
+  iface->get_deskrelative_origin = gdk_window_x11_get_deskrelative_origin;
   iface->shape_combine_mask = gdk_window_x11_shape_combine_mask;
   iface->shape_combine_region = gdk_window_x11_shape_combine_region;
   iface->set_child_shapes = gdk_window_x11_set_child_shapes;